Wstęp
Celem projektu było określenie jakie czynniki najlepiej pozwalają przewidzieć energię wytwarzaną przez panele fotowoltaiczne na podstawie danych pochodzących z trzech sąsiadujących elektrowni słonecznych we Włoszech. Analizie podlegał zbiór danych zawierający pomiary z czujników umieszczonych przy panelach fotowoltaicznych. Na początku należało przyjrzeć się danym, nazwom ich kolumn i ich rozkładom. Następnie należało zastanowić się czy nie występują warotści puste a następnie takie wartości wyczyścić. Następnie możnabyło przystąpić do budowy regresora który mógłby posłużyć do przewidywania produkcji energii w zależności od innych czynnikóW. Przy wytypowaniu najważniejszych atrybutów które wpływających na wielkość wytwarzanej energii ważny okazał się wykres korelacji atrybutóW. Naturalnymi kandydatami były atrybuty które miały dodatnią bądź ujemną korelację z atrybutem kwh. Następnie został stworzony regresor, i na podstawie wag atrybutów został wyznaczony najważniejszy atrybut - nasłonecznienie.
Wartości puste:
Zbiór nie zbiór nie zawierał wartości NA, ale zawierał dwie sytuacje które mogą wskazywać na błędy bądź awarie czujników.
Są sytuacje, gdy wartosć kwh jest równa zero. Taka sytuacja nie powinna zajść, gdy wartość napromieniowania słonecznego jest różna od zero. W takiej sytuacji pdstawiamy zamiast wartości zero wartość średnią. Możnaby także takie pomiary w ogóle wyrzucać ze zbrioru, ale utrata informacji byłaby zbyt duża.
I vice versa, gdy zerowe irradiamento, nie powinno być kwh. W takiej sytuacji, gdy jest dodatnie kwh i zerowe irradiamento, podstawiamy podd irradiamento wartość średnią.
Podsumowanie
Dane kolumny, które udało się rozszyfrować, oznaczają:
- idsito - id czujnika
- idmodel - model czujnika
- idbrand - firma czujnika
- lat - szerkość geograficzna
- lon - długość geograficzna
- ageinmonths - wiek czujnika w miesiącach
- anno - rok pomiaru
- ora - dzień pomiaru
- data - data pomiaru
- temperatura_ambiente - temperatura pokojowa
- irradiamento - nasłonecznienie
- pressure - ciśnienie powietrza
- windspeed - Prędkość wiatru
- humidity - Wilgotność powietrza
- dewpoint - Punkt rosy
- windbearing - Kierunek wiatru
- cloudcover - Zaczmurzenie
- altitude - Wysokość
- azimuth - Azymut
- kwh - Poziom wytwarzanej energii
## 'data.frame': 235790 obs. of 50 variables:
## $ idsito : num 0.425 0.25 0.35 0.325 0 0.375 0.4 0.125 0.225 0.075 ...
## $ idmodel : num 0.083 0.208 0.375 0.292 0 0.417 0.458 0.167 0.208 0.083 ...
## $ idbrand : num 0.083 0.083 0 0.167 0.333 0 0 0.167 0.083 0.083 ...
## $ lat : num 0.437 0.437 0.439 0.44 0.436 0.552 0.553 0.415 0.437 0.437 ...
## $ lon : num 0.631 0.62 0.626 0.612 0.626 0.154 0.16 0.691 0.62 0.624 ...
## $ ageinmonths : num 1 0.063 0 0.25 0.719 0.125 0.125 0 0.063 1 ...
## $ anno : int 2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 ...
## $ day : num 0.003 0.003 0.003 0.003 0.003 0.003 0.003 0.003 0.003 0.003 ...
## $ ora : num 0 0 0 0 0 0 0 0 0 0 ...
## $ data : Factor w/ 13870 levels "1/1/2013 10:00",..: 410 410 410 410 410 410 410 410 410 410 ...
## $ temperatura_ambiente: num 0.212 0.212 0.212 0.212 0.212 0.212 0.212 0.212 0.212 0.212 ...
## $ irradiamento : num 0.109 0.109 0.109 0.109 0.109 ...
## $ pressure : num 0 0 0 0 0 0 0 0.762 0 0 ...
## $ windspeed : num 0.054 0.062 0.054 0.06 0.054 0.054 0.054 0.071 0.061 0.054 ...
## $ humidity : num 0.81 0.8 0.76 0.76 0.82 0.83 0.83 0.81 0.8 0.8 ...
## $ icon : num 0.083 0.083 0.083 0.083 0.083 0.75 0.75 0.083 0.083 0.083 ...
## $ dewpoint : num 0.436 0.444 0.432 0.442 0.436 0.45 0.45 0.502 0.444 0.435 ...
## $ windbearing : num 0.557 0.585 0.557 0.578 0.557 0.493 0.493 0.559 0.582 0.557 ...
## $ cloudcover : num 0 0 0 0 0 0.57 0.56 0 0 0 ...
## $ tempi : num 0.113 0.117 0.115 0.115 0.119 0.104 0.104 0.072 0.119 0.119 ...
## $ irri : num 0.219 0.22 0.22 0.22 0.22 0.22 0.22 0.216 0.22 0.216 ...
## $ pressurei : num 0 0 0 0 0 0 0 0 0 0 ...
## $ windspeedi : num 0.04 0.038 0.039 0.04 0.038 0.038 0.038 0.037 0.04 0.038 ...
## $ humidityi : num 0.085 0.046 0.044 0.044 0.046 0.113 0.113 0.044 0.091 0.046 ...
## $ dewpointi : num 0.114 0.188 0.201 0.17 0.114 0.122 0.122 0.114 0.181 0.202 ...
## $ windbearingi : num 0.422 0.374 0.336 0.351 0.422 0.333 0.333 0.336 0.339 0.418 ...
## $ cloudcoveri : num 0.2 0.329 0.201 0.198 0.32 0.202 0.202 0.196 0.28 0.2 ...
## $ dist : num 0.984 0.984 0.984 0.984 0.984 ...
## $ altitude : num 0.118 0.117 0.118 0.118 0.117 0.139 0.139 0.115 0.118 0.117 ...
## $ azimuth : num 0.148 0.147 0.147 0.145 0.147 0.165 0.164 0.157 0.147 0.147 ...
## $ altitudei : num 0.52 0.508 0.52 0.507 0.504 0.534 0.534 0.095 0.509 0.504 ...
## $ azimuthi : num 0.813 0.78 0.825 0.782 0.78 0.769 0.769 0.207 0.78 0.789 ...
## $ pcnm1 : num 0.376 0.38 0.378 0.384 0.378 0.838 0 0.424 0.38 0.378 ...
## $ pcnm2 : num 0.095 0.526 0.348 0.972 0.25 0.377 0.4 0.394 0.523 0.352 ...
## $ pcnm3 : num 1 0.747 0 0.485 0.605 0.605 0.605 0.605 0.805 0.551 ...
## $ pcnm4 : num 0.438 0.534 0.314 0.36 0.531 0.531 0.531 0.531 0 0.773 ...
## $ pcnm5 : num 1 0.403 0.583 0.462 0.427 0.427 0.427 0.427 0.429 0.331 ...
## $ pcnm6 : num 0 0.765 0.465 0.358 0.493 0.493 0.493 0.493 0.484 0.305 ...
## $ pcnm7 : num 0.011 0.061 0.04 0.112 1 0.114 0.114 0.114 0.06 0.041 ...
## $ pcnm8 : num 0.127 0.516 0 0.154 0.412 0.412 0.412 0.412 1 0.7 ...
## $ pcnm9 : num 0.599 0.867 0.072 1 0.532 0.532 0.532 0.532 0 0.543 ...
## $ pcnm10 : num 0.553 0 0.432 1 0.619 0.619 0.619 0.619 0.717 0.874 ...
## $ pcnm11 : num 0.39 0.086 0.257 0.252 0.327 0.327 0.327 0.327 0.313 0 ...
## $ pcnm12 : num 0.828 0.99 0.884 0.787 0.748 0.748 0.748 0.748 0.76 0.796 ...
## $ pcnm13 : num 0.562 0.841 0.597 1 0.614 0.614 0.614 0.614 0.89 0.291 ...
## $ pcnm14 : num 0.485 0.606 0.539 0.432 0.473 0.473 0.473 0.473 0.424 1 ...
## $ pcnm15 : num 0.612 0.616 0.614 0.62 0.614 1 0.15 0.57 0.616 0.614 ...
## $ irr_pvgis_mod : num 0 0 0 0 0 0 0 0 0 0 ...
## $ irri_pvgis_mod : num 0.189 0.2 0.158 0.204 0.199 0.198 0.198 0.158 0.199 0.201 ...
## $ kwh : num 0.169 0.169 0.169 0.169 0.169 ...
Table continues below
| Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
Min. :0.4150 |
| 1st Qu.:0.1000 |
1st Qu.:0.1670 |
1st Qu.:0.0830 |
1st Qu.:0.4370 |
| Median :0.2250 |
Median :0.2080 |
Median :0.1670 |
Median :0.4370 |
| Mean :0.2147 |
Mean :0.2426 |
Mean :0.1519 |
Mean :0.4495 |
| 3rd Qu.:0.3250 |
3rd Qu.:0.2920 |
3rd Qu.:0.1670 |
3rd Qu.:0.4390 |
| Max. :0.4250 |
Max. :0.7500 |
Max. :0.4170 |
Max. :0.5530 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.1540 |
Min. :0.0000 |
Min. :2012 |
Min. :0.0000 |
| 1st Qu.:0.6200 |
1st Qu.:0.0000 |
1st Qu.:2012 |
1st Qu.:0.2520 |
| Median :0.6240 |
Median :0.1250 |
Median :2012 |
Median :0.4770 |
| Mean :0.5711 |
Mean :0.3145 |
Mean :2012 |
Mean :0.4812 |
| 3rd Qu.:0.6300 |
3rd Qu.:0.7190 |
3rd Qu.:2013 |
3rd Qu.:0.7100 |
| Max. :0.6910 |
Max. :1.0000 |
Max. :2013 |
Max. :1.0000 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.000 |
1/1/2013 10:00: 17 |
Min. :0.0450 |
Min. :0.0010 |
| 1st Qu.:0.222 |
1/1/2013 11:00: 17 |
1st Qu.:0.2120 |
1st Qu.:0.0840 |
| Median :0.500 |
1/1/2013 12:00: 17 |
Median :0.3480 |
Median :0.1091 |
| Mean :0.500 |
1/1/2013 13:00: 17 |
Mean :0.3734 |
Mean :0.1454 |
| 3rd Qu.:0.778 |
1/1/2013 14:00: 17 |
3rd Qu.:0.5300 |
3rd Qu.:0.2040 |
| Max. :1.000 |
1/1/2013 15:00: 17 |
Max. :0.8180 |
Max. :0.7100 |
| NA |
(Other) :235688 |
NA |
NA |
Table continues below
| Min. :0.0000 |
Min. :0.00000 |
Min. :0.1600 |
Min. :0.0000 |
| 1st Qu.:0.7480 |
1st Qu.:0.04200 |
1st Qu.:0.5400 |
1st Qu.:0.0830 |
| Median :0.7530 |
Median :0.06600 |
Median :0.7000 |
Median :0.6670 |
| Mean :0.6504 |
Mean :0.07622 |
Mean :0.6844 |
Mean :0.4623 |
| 3rd Qu.:0.7550 |
3rd Qu.:0.10200 |
3rd Qu.:0.8400 |
3rd Qu.:0.6670 |
| Max. :0.7690 |
Max. :0.69600 |
Max. :1.0000 |
Max. :0.7500 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.1390 |
Min. :0.0000 |
Min. :0.000 |
Min. :0.0090 |
| 1st Qu.:0.5350 |
1st Qu.:0.3000 |
1st Qu.:0.230 |
1st Qu.:0.0730 |
| Median :0.6190 |
Median :0.4780 |
Median :0.310 |
Median :0.1110 |
| Mean :0.6055 |
Mean :0.4512 |
Mean :0.359 |
Mean :0.1225 |
| 3rd Qu.:0.6830 |
3rd Qu.:0.6600 |
3rd Qu.:0.510 |
3rd Qu.:0.1260 |
| Max. :0.8650 |
Max. :0.7690 |
Max. :1.000 |
Max. :0.9830 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.108 |
Min. :0.000000 |
Min. :0.00000 |
Min. :0.03400 |
| 1st Qu.:0.216 |
1st Qu.:0.000000 |
1st Qu.:0.03700 |
1st Qu.:0.04400 |
| Median :0.220 |
Median :0.000000 |
Median :0.03800 |
Median :0.04400 |
| Mean :0.222 |
Mean :0.000237 |
Mean :0.03852 |
Mean :0.06384 |
| 3rd Qu.:0.222 |
3rd Qu.:0.000000 |
3rd Qu.:0.03900 |
3rd Qu.:0.06200 |
| Max. :1.000 |
Max. :1.000000 |
Max. :1.00000 |
Max. :0.57900 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.0630 |
Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
| 1st Qu.:0.1140 |
1st Qu.:0.3360 |
1st Qu.:0.1960 |
1st Qu.:0.1913 |
| Median :0.1140 |
Median :0.3360 |
Median :0.1960 |
Median :0.4590 |
| Mean :0.1194 |
Mean :0.3455 |
Mean :0.2062 |
Mean :0.4686 |
| 3rd Qu.:0.1180 |
3rd Qu.:0.3390 |
3rd Qu.:0.1980 |
3rd Qu.:0.7268 |
| Max. :0.4150 |
Max. :1.0000 |
Max. :1.0000 |
Max. :1.0000 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.1110 |
Min. :0.1280 |
Min. :0.0000 |
Min. :0.0000 |
| 1st Qu.:0.4190 |
1st Qu.:0.2950 |
1st Qu.:0.0960 |
1st Qu.:0.2090 |
| Median :0.5640 |
Median :0.4250 |
Median :0.1360 |
Median :0.2880 |
| Mean :0.5464 |
Mean :0.4546 |
Mean :0.2055 |
Mean :0.3653 |
| 3rd Qu.:0.6810 |
3rd Qu.:0.6350 |
3rd Qu.:0.2660 |
3rd Qu.:0.4820 |
| Max. :0.8840 |
Max. :0.8180 |
Max. :0.9820 |
Max. :1.0000 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
| 1st Qu.:0.3770 |
1st Qu.:0.2500 |
1st Qu.:0.5510 |
1st Qu.:0.3630 |
| Median :0.3780 |
Median :0.3770 |
Median :0.6050 |
Median :0.5310 |
| Mean :0.4224 |
Mean :0.3538 |
Mean :0.6045 |
Mean :0.5189 |
| 3rd Qu.:0.3800 |
3rd Qu.:0.4220 |
3rd Qu.:0.7300 |
3rd Qu.:0.6340 |
| Max. :1.0000 |
Max. :0.9720 |
Max. :1.0000 |
Max. :1.0000 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
| 1st Qu.:0.3310 |
1st Qu.:0.3390 |
1st Qu.:0.0310 |
1st Qu.:0.2040 |
| Median :0.4270 |
Median :0.4930 |
Median :0.0520 |
Median :0.4120 |
| Mean :0.4165 |
Mean :0.4941 |
Mean :0.1142 |
Mean :0.4034 |
| 3rd Qu.:0.4620 |
3rd Qu.:0.4930 |
3rd Qu.:0.1140 |
3rd Qu.:0.5110 |
| Max. :1.0000 |
Max. :1.0000 |
Max. :1.0000 |
Max. :1.0000 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
| 1st Qu.:0.5270 |
1st Qu.:0.5530 |
1st Qu.:0.2570 |
1st Qu.:0.7480 |
| Median :0.5320 |
Median :0.6190 |
Median :0.3270 |
Median :0.7600 |
| Mean :0.5371 |
Mean :0.6276 |
Mean :0.3236 |
Mean :0.7568 |
| 3rd Qu.:0.6000 |
3rd Qu.:0.7170 |
3rd Qu.:0.3270 |
3rd Qu.:0.8840 |
| Max. :1.0000 |
Max. :1.0000 |
Max. :1.0000 |
Max. :1.0000 |
| NA |
NA |
NA |
NA |
Table continues below
| Min. :0.1370 |
Min. :0.0000 |
Min. :0.0000 |
Min. :0.0000 |
| 1st Qu.:0.6140 |
1st Qu.:0.4320 |
1st Qu.:0.6120 |
1st Qu.:0.0000 |
| Median :0.6140 |
Median :0.4730 |
Median :0.6140 |
Median :0.0560 |
| Mean :0.6501 |
Mean :0.4893 |
Mean :0.5709 |
Mean :0.1767 |
| 3rd Qu.:0.7380 |
3rd Qu.:0.5300 |
3rd Qu.:0.6150 |
3rd Qu.:0.3250 |
| Max. :1.0000 |
Max. :1.0000 |
Max. :1.0000 |
Max. :1.0000 |
| NA |
NA |
NA |
NA |
| Min. :-0.0250 |
Min. :0.0010 |
| 1st Qu.: 0.1580 |
1st Qu.:0.1070 |
| Median : 0.1940 |
Median :0.1688 |
| Mean : 0.1967 |
Mean :0.2250 |
| 3rd Qu.: 0.2130 |
3rd Qu.:0.3320 |
| Max. : 1.0060 |
Max. :1.0000 |
| NA |
NA |
Korelacja pomiędzy atrybutami
Wykres przedstawia korelację pomiędzy atrybutami.

Wytwarzanie energii w czasie i przestrzeni
Wykres przedstawia sumaryczną ilość wytwarzanej energii dla danej długości i szerokości geograficznej w skali roku.
energyTimeSpace <- dataSet %>% group_by(lat,lon,anno) %>% summarise(kwh_sum = sum(kwh))
p <- energyTimeSpace %>%
plot_ly(
x = ~lat,
y = ~lon,
size = ~kwh_sum,
color = ~kwh_sum,
frame = ~anno,
type = 'scatter',
mode = 'markers',
showlegend = T
)
p
Regresor
Do regresora wybrane zostały kolumny które wykazały korelację (dodatnią bądź negatywną) z kolumną kwh. Do trenowania i testowania regresora został wybrany stały podział zbioru. Dane zostały podzielone w proporcjachL 0.6 = zbiór treningowy, 0.4 = zbiór treningowy. Wybrana została metoda regresji liniowej.
modelDataSet <- dataSet %>% select(idsito,lat,lon,ora,azimuthi,humidity,temperatura_ambiente,tempi,cloudcover,irri_pvgis_mod,irr_pvgis_mod,irradiamento,kwh)
split<-createDataPartition(y = modelDataSet$kwh, p = 0.6, list = FALSE)
dev<-modelDataSet[split,]
val<-modelDataSet[-split,]
lmFit<-train(kwh~., data = dev, trControl=trainControl(method="cv", number=10), method = "lm")
summary(lmFit)
##
## Call:
## lm(formula = .outcome ~ ., data = dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.63234 -0.04823 0.00092 0.03464 0.99384
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.984160 0.068487 -14.370 < 2e-16 ***
## idsito 0.066599 0.002306 28.875 < 2e-16 ***
## lat 1.873522 0.116343 16.103 < 2e-16 ***
## lon 0.438521 0.028886 15.181 < 2e-16 ***
## ora 0.003894 0.001283 3.034 0.00241 **
## azimuthi -0.015815 0.001856 -8.521 < 2e-16 ***
## humidity -0.050913 0.002121 -24.007 < 2e-16 ***
## temperatura_ambiente -0.001679 0.002666 -0.630 0.52880
## tempi -0.238972 0.005413 -44.148 < 2e-16 ***
## cloudcover -0.048048 0.001111 -43.249 < 2e-16 ***
## irri_pvgis_mod 0.090104 0.005840 15.429 < 2e-16 ***
## irr_pvgis_mod 0.198341 0.002485 79.821 < 2e-16 ***
## irradiamento 0.927730 0.004096 226.505 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.09937 on 141462 degrees of freedom
## Multiple R-squared: 0.6889, Adjusted R-squared: 0.6888
## F-statistic: 2.61e+04 on 12 and 141462 DF, p-value: < 2.2e-16
predictedVal<-predict(lmFit,val)
modelvalues<-data.frame(obs = val$kwh, pred=predictedVal)
defaultSummary(modelvalues)
## RMSE Rsquared MAE
## 0.09914969 0.68966626 0.06568357
Analiza ważności atrybutów
Z analizy ważności atrybutów wynika że nazważniejszym aktrybutem jest atrybut irradiamento - nasłonecznienie.
varImp(lmFit)
## lm variable importance
##
## Overall
## irradiamento 100.000
## irr_pvgis_mod 35.060
## tempi 19.267
## cloudcover 18.868
## idsito 12.505
## humidity 10.350
## lat 6.851
## irri_pvgis_mod 6.552
## lon 6.442
## azimuthi 3.493
## ora 1.065
## temperatura_ambiente 0.000
plot(varImp(lmFit))
